/**
 * 音频解码器 FFMpeg内部AAC解码器
 * PCM:(Pulse Code Modulation) 脉冲编码调制
 *  1.PCM的定义
 *      模拟信号是指随时间连续变化的物理量，将声音在磁带上记录成磁场强度的变化或在黑胶唱片上记录成沟槽大小的变化就是
 *      以模拟方式尽心存储。数字信号是离散的，计算机中的数据都是以数字方式存储的。模拟信号和数字信号可以相互转换
 *      是一种将模拟信号的数字化方法，它是最常用、最简单的波形编码方式
 *  2.PCM的实现过程
 *      简单概括:模拟数据-->采样-->量化-->编码-->数字信号
 *      具体概括:
 *          1.将模拟信号按照相同的时间间距(即采样时间)进行采样
 *          2.按某种运算法确定样本值 即量化
 *          3.将样本值用二进制表示 即编码
 *  3.数字音频基础概念
 *      1.采样率(采样频率)：每秒内进行采样的次数，采样率越高，数字波形的形状越接近原始模拟波形。符号:fs，单位:Hz
 *          采样频率    频率范围      品质级别
 *          8000Hz     0-4000Hz     电话、对于人声足够
 *          11025Hz    0-5512Hz     AM电台(低端多媒体)
 *          22050Hz    0-11050Hz    FM电台(高端多媒体)
 *          32000Hz    0-16000Hz    好于FM电台(标准广播采样率)
 *          44100Hz    0-22050Hz    CD
 *          48000Hz    0-24000Hz    标准DVD，及专业音频领域
 *          96000Hz    0-48000Hz    蓝光DVD
 *          192000Hz   0-96000Hz    声卡支持的采样率
 *      2.采样位数(采样精度、采样深度):采样值的二进制编码的位数，位数越高，对声音的记录越精细 单位:bit
 *          采样位数    品质级别    采样振幅值    动态范围
 *          8bit       电话       256          48.16dB
 *          16bit      音频CD     65536        96.33dB
 *          24bit      音频DVD    16777216     144.49dB
 *          32bit      最佳       4294967296   192.66dB
 *      3.声道(通道数、轨道数、音轨数):录音时的麦克风数量，也是播放时的音响数量
 *          常见的声道数有单声道(Mono),双声道(Stereo),5.1声道,7.1声道 .1声道指的是低音声道
 *      4.比特率(码率):每秒播放连续的音频或视频的比特的数量 单位:bit/s
 *          音频比特率=采样率*采样位数*声道
 *  4.存储格式
 *      1.Planar(平面):不同声道的数据分开单独存储
 *      2.Packed(紧凑):不同声道的数据交错存储
 */

#include "FFMpegAACDecoder.h"

const AVCodec *FFMpegAACDecoder::findCodec(DecoderParam &decoderParam) {
  return avcodec_find_decoder_by_name("aac");
}

int32_t FFMpegAACDecoder::initContextParam(AVCodecContext *pCodecCtx, DecoderParam &decoderParam) {
  int32_t ret = avcodec_parameters_to_context(pCodecCtx, decoderParam.pStream->codecpar);
  if (ret < SUCCESS) {
    return ret;
  }

  return SUCCESS;
}

MediaType FFMpegAACDecoder::getMediaType() {
  return MediaType_Audio;
}

const char *FFMpegAACDecoder::getClassName() {
  return "FFMpegAACDecoder";
}

void FFMpegAACDecoder::toString() {
  LOG_TEST("FFMpegAACDecoder()")
}